home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / xlisp2.arc / XLISP.C < prev    next >
Text File  |  1985-01-01  |  2KB  |  79 lines

  1. /* xlisp - an experimental version of lisp that supports object-oriented
  2.            programming */
  3.  
  4. #include "xlisp.h"
  5.  
  6. /* external variables */
  7. extern NODE *s_stdin,*s_stdout;
  8. extern NODE *s_evalhook,*s_applyhook;
  9. extern NODE *true;
  10.  
  11. /* main - the main routine */
  12. main(argc,argv)
  13.   int argc; char *argv[];
  14. {
  15.     NODE expr;
  16.     CONTEXT cntxt;
  17.     int i;
  18.  
  19.     /* print the banner line */
  20.     printf("XLISP version 1.4 - 30-DEC-1984\n");
  21.  
  22.     /* setup initialization error handler */
  23.     xlbegin(&cntxt,CF_ERROR,(NODE *) 1);
  24.     if (setjmp(cntxt.c_jmpbuf)) {
  25.     printf("fatal initialization error\n");
  26.     exit();
  27.     }
  28.  
  29.     /* initialize xlisp */
  30.     xlinit();
  31.     xlend(&cntxt);
  32.  
  33.     /* reset the error handler */
  34.     xlbegin(&cntxt,CF_ERROR,true);
  35.  
  36.     /* load "init.lsp" */
  37.     if (setjmp(cntxt.c_jmpbuf) == 0)
  38.     xlload("init",FALSE,FALSE);
  39.  
  40.     /* load any files mentioned on the command line */
  41.     if (setjmp(cntxt.c_jmpbuf) == 0)
  42.     for (i = 1; i < argc; i++)
  43.         if (!xlload(argv[i],TRUE,FALSE))
  44.         xlfail("can't load file");
  45.  
  46.     /* create a new stack frame */
  47.     xlsave(&expr,NULL);
  48.  
  49.     /* main command processing loop */
  50.     while (TRUE) {
  51.  
  52.     /* setup the error return */
  53.     if (setjmp(cntxt.c_jmpbuf)) {
  54.         s_evalhook->n_symvalue = NULL;
  55.         s_applyhook->n_symvalue = NULL;
  56.         xlflush();
  57.     }
  58.  
  59.     /* read an expression */
  60.     if (!xlread(s_stdin->n_symvalue,&expr.n_ptr))
  61.         break;
  62.  
  63.     /* evaluate the expression */
  64.     expr.n_ptr = xleval(expr.n_ptr);
  65.  
  66.     /* print it */
  67.     stdprint(expr.n_ptr);
  68.     }
  69.     xlend(&cntxt);
  70. }
  71.  
  72. /* stdprint - print to standard output */
  73. stdprint(expr)
  74.   NODE *expr;
  75. {
  76.     xlprint(s_stdout->n_symvalue,expr,TRUE);
  77.     xlterpri(s_stdout->n_symvalue);
  78. }
  79.